unit ucalculosclassificacao;

{$mode objfpc}

interface


uses
  Classes, SysUtils, Dialogs;

type
  TComponentes = record
    argila, silte, areia: real;
  end;

  TDadosAmostra = record
    peso_volume_pipetado_1, peso_becker_1,
    peso_volume_pipetado_2, peso_becker_2: integer
  end;

function Porcentagens(Pesos: TDadosAmostra): TComponentes;
function Classificacao(Valores: TComponentes): string;
function PreparaCalculo(): TDadosAmostra;

implementation

uses
  dmprincipal, dmanalise, dmrelatorio;

function Porcentagens(Pesos: TDadosAmostra): TComponentes;
var
  argila_silte: real;
  resultado: TComponentes;
begin
  argila_silte := ((Pesos.peso_volume_pipetado_1 - Pesos.peso_becker_1) / 10);
  resultado.argila := ((Pesos.peso_volume_pipetado_2 - Pesos.peso_becker_2) / 10);
  resultado.silte := (argila_silte - resultado.argila);
  resultado.areia := 100 - (resultado.argila + resultado.silte);
  Porcentagens := resultado;
end;

function Classificacao(Valores: TComponentes): string;
var
  resultadoClassificacao: string;
begin
  if (Valores.argila > 60) then
  begin
    resultadoClassificacao := ('Muito argiloso');
  end
  else
  begin
    if (Valores.argila > 35) then
    begin
      resultadoClassificacao := ('Argiloso');
    end
    else
    begin
      if (Valores.areia < 15) then
      begin
        resultadoClassificacao := ('Siltoso');
      end
      else
      begin
        if ((Valores.areia - Valores.argila) < 70) then
        begin
          resultadoClassificacao := ('Textura Média');
        end
        else
        begin
          resultadoClassificacao := ('Arenoso');
        end;
      end;
    end;
  end;
  Classificacao := resultadoClassificacao;
end;

function PreparaCalculo(): TDadosAmostra;
var
  peso: TDadosAmostra;
begin
  peso.peso_volume_pipetado_1 :=
    DataAnalise.ZQueryAmostra.FieldByName('peso_volume_pipetado_1').AsInteger;
  peso.peso_volume_pipetado_2 :=
    DataAnalise.ZQueryAmostra.FieldByName('peso_volume_pipetado_2').AsInteger;
  peso.peso_becker_1 := DataAnalise.ZQueryAmostra.FieldByName(
    'peso_becker_1').AsInteger;
  peso.peso_becker_2 := DataAnalise.ZQueryAmostra.FieldByName(
    'peso_becker_2').AsInteger;
  PreparaCalculo := peso;
end;

end.
